package HashTable_08.DataStructure;

/*
 * @Author 罗
 * @date 2020/3/19 - 9:20 下午
 *
 */

import HashTable_08.entity.Employee;

public class HashTableEmp {
    EmpLinkedList[] empListArray;
    private int size;

    public Employee findEmployeeById(int id){
        int index = hashFunction(id);

        Employee employee =  empListArray[index].findById(id);
        if(employee == null){
            System.out.println("已在第"+index+"条链表中寻找，但仍然未找到");
        }else{
            System.out.println("在第"+index+"条链表中找到"+employee);
        }

        return employee;
    }
    /**
     * 通过雇员id删除雇员
     * @param id
     */
    public void deleteById(int id) {
        int empListArrayIndex = hashFunction(id);
        empListArray[empListArrayIndex].delete(id);
    }

    /**
     * 列出hash表中的数据
     */
    public void list() {
        for (int i = 0; i < empListArray.length; i++) {

            empListArray[i].list(i);
        }
    }

    /**
     * 添加到hash表中
     *
     * @param employee
     */
    public void add(Employee employee) {
//       根据员工id，得到该员工应该添加到那一条链表
        int empListArrayIndex = hashFunction(employee.id);
        empListArray[empListArrayIndex].addOrderly(employee);
    }

    /**
     * 散列函数
     * 最简单的散列函数，取模法
     *
     * @return
     */
    public int hashFunction(int id) {
        return id % size;
    }


    /**
     * 构造器
     *
     * @param size 指定链表的数量
     */
    public HashTableEmp(int size) {
//        创建一个由size条链表组成的数组
//        链表和数组共同组成hash表
        this.empListArray = new EmpLinkedList[size];
        this.size = size;
//        数组创建好了，只是空数组，数组里面没有EmpLinkedList()对象
        for (int i = 0; i < empListArray.length; i++) {
            empListArray[i] = new EmpLinkedList();
        }

    }
}
